﻿using CompanyManagement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;

namespace CompanyManagement.admin
{
    public partial class Accounts : System.Web.UI.Page
    {
        private AccountDAO accountDao;
        public Accounts()
        {
            accountDao = new AccountDAO();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            GridFilterMenuTranslate.TranslateGridFilterMenu(ref RadGrid1);
            if (!(Session["usertype"] != null && Session["usertype"].ToString().Equals("1")))
            {
                Response.Redirect("~/Login.aspx");
            }
        }
        
        void ClearMessage()
        {
            error.Visible = false;
            success.Visible = false;
            ltrError.Text = string.Empty;
            ltrSuccess.Text = string.Empty;
        }

        protected void RadGrid1_DeleteCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            string accountID = (e.Item as GridDataItem).OwnerTableView.DataKeyValues[e.Item.ItemIndex]["ID"].ToString();
            try
            {
                var deleteObj = new Account() { ID = Convert.ToInt32(accountID) };
                
                if (accountDao.Delete(deleteObj))
                {
                    error.Visible = false;
                    success.Visible = true;
                    ltrSuccess.Text = "Xóa tài khoản người dùng thành công.";
                    RadGrid1.Rebind();
                }
            }
            catch (Exception ex)
            {
                error.Visible = true;
                success.Visible = false;
                Tools.Logger("Error: " + ex.Message, "AccountManagement", "DeleteCommand");
                ltrSuccess.Text = "Có lỗi khi xóa tài khoản. Vui lòng thử lại";
            }
        }

        protected void RadGrid1_InsertCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);

            Account insertObj = new Account() { ID = -1, IsActive = true, UserTypeID = 2 };

            insertObj.username = (userControl.FindControl("txtUsername") as TextBox).Text;
            insertObj.password = (userControl.FindControl("txtPassword") as TextBox).Text;
            try
            {
                if (accountDao.CheckAccountExisted(insertObj))
                {
                    error.Visible = true;
                    success.Visible = false;
                    ltrError.Text = "Đã tồn tại tài khoản người dùng này trong hệ thống.";
                    e.Canceled = true;
                    return;
                }
                if (accountDao.Insert(insertObj))
                {
                    error.Visible = false;
                    success.Visible = true;
                    ltrSuccess.Text = "Thêm mới tài khoản người dùng:<b><i>" + insertObj.username + "</<i></b>  thành công";
                    RadGrid1.MasterTableView.IsItemInserted = true;
                    RadGrid1.MasterTableView.Rebind();
                }
            }
            catch (Exception ex)
            {
                error.Visible = true;
                success.Visible = false;
                ltrError.Text = "Có lỗi khi thêm mới tài khoản người dùng. Vui lòng thử lại";
                Tools.Logger("Error: " + ex.Message, "AccountManagement", "InsertCommand");
                e.Canceled = true;
                return;
            }
        }

        protected void RadGrid1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            ClearMessage();
            switch (e.CommandName)
            {
                case "Reset":
                    string id = (e.Item as GridDataItem).OwnerTableView.DataKeyValues[e.Item.ItemIndex]["ID"].ToString();
                    try
                    {
                        if (accountDao.ResetPassword(Convert.ToInt32(id)))
                        {
                            error.Visible = false;
                            success.Visible = true;
                            ltrSuccess.Text = "Reset Pasword thành công!";
                            RadGrid1.Rebind();
                        }
                        else
                        {
                            error.Visible = true;
                            success.Visible = false;
                            ltrError.Text = "Không tìm thấy tài khoản người dùng trong hệ thống!";
                            return;
                        }
                    }
                    catch (Exception ex)
                    {
                        error.Visible = true;
                        success.Visible = false;
                        ltrError.Text = "Có lỗi khi reset pasword!";
                        Tools.Logger("AccountID:"+ id +" - Lỗi:" + ex.Message, "AccountManagement", "ResetPassword");
                        return;
                    }
                    break;
                default:
                    break;
            }
        }

        protected void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
        {

        }

        protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
            if (Session["user"] == null || string.IsNullOrEmpty(Session["user"].ToString()))
            {
                Session["usertype"] = null;
                Response.Redirect("~/Login.aspx");
            }
            RadGrid1.DataSource = accountDao.GetAccounts(Session["user"].ToString());
        }

        protected void RadGrid1_UpdateCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
            GridEditableItem editedItem = e.Item as GridEditableItem;
            string accountID = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["ID"].ToString();
            Account updateObj = accountDao.GetAccountByID(Convert.ToInt32(accountID));
            if (updateObj == null)
            {
                error.Visible = true;
                success.Visible = false;
                ltrError.Text = "Không tìm thấy tài khoản này trong hệ thống.";
                e.Canceled = true;
                return;
            }

            updateObj.password = (userControl.FindControl("txtPassword") as TextBox).Text;
            RadButton chkIsAdmin = userControl.FindControl("chkIsAdmin") as RadButton;
            if (chkIsAdmin != null && chkIsAdmin.Checked)
                updateObj.UserTypeID = 1;
            else
                updateObj.UserTypeID = 2;
            try
            {
                if (accountDao.CheckAccountExisted(updateObj))
                {
                    error.Visible = true;
                    success.Visible = false;
                    ltrError.Text = "Đã tồn tại tài khoản người dùng này trong hệ thống.";
                    e.Canceled = true;
                    return;
                }
                if (accountDao.Update(updateObj))
                {
                    error.Visible = false;
                    success.Visible = true;
                    ltrSuccess.Text = "Cập nhật tài khoản người dùng thành công";
                    RadGrid1.MasterTableView.Rebind();
                }
            }
            catch (Exception ex)
            {
                error.Visible = true;
                success.Visible = false;
                ltrError.Text = "Có lỗi khi Cập nhật tài khoản người dùng. Vui lòng thử lại";
                Tools.Logger("Error: " + ex.Message, "AccountManagement", "UpdateCommand");
                e.Canceled = true;
                return;
            }
        }
    }
}